package com.aaa.system.controller.api;

import com.aaa.system.service.IDictDataService;
import com.aaa.entity.DictData;
import com.aaa.vo.Result;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 响应到前端的controller类
 */
@RestController
@RequestMapping("system/api/dict/data")
public class ApiDictDataController {

    @Autowired
    private IDictDataService dictDataService;

    /**
     * 根据字典类型查询字典数据
     * @param type 字典数据
     * @return  字典类型数据
     */
    @GetMapping("findByType/{type}")
    public Result<List<DictData>> getInfo(@PathVariable String type){
        return dictDataService.findByType(type);
    }


    /**
     * 字典类型页面进行的同步缓存，将所有的字典类型数据查询出来，同步到redis缓存中
     * @return 同步缓存数据
     */
    @GetMapping("cacheAsync")
    public Result<String> cacheAsync(){
        return dictDataService.cacheAsync();
    }


    /**
     * 分页动态查询字典类型数据
     * @param current  当前页码
     * @param size  每页显示的条数
     * @param dictData 模糊查询条件，从字典类型页面进入字典
     * @return  分页字典类型数据
     */
    @PostMapping("selectAll/{current}/{size}")
    public Result<IPage<DictData>> selectAll(
           @PathVariable Integer current,
           @PathVariable Integer size,
           @RequestBody DictData dictData
    ){
        Result<IPage<DictData>> selectAll = dictDataService.selectAll(current,size,dictData);
        return selectAll;
    }

    /**
     * 添加或者修改字典数据数据
     * @param dictData 字典类型数据对象
     * @return 操作结果信息
     */
    @PostMapping("saveOrUpdateDictData")
    public Result<Boolean> saveOrUpdateDictData(@RequestBody DictData dictData){
        return dictDataService.saveOrUpdateDictData(dictData);
    }

    /**
     * 根据dictCode删除单个或者多个字典数据
     * @param dictCodes dictCode数组
     * @return 操作结果信息
     */
    @DeleteMapping("deleteDictDataByIds/{dictCodes}")
    public Result<Boolean> deleteDictDataByIds(@PathVariable Long[] dictCodes){
        return dictDataService.deleteDictDataByIds(dictCodes);
    }
}
